# -*- coding: utf-8 -*-
"""
应用配置管理文件
功能：定义不同环境下的应用配置
作者：东篱馆主
创建时间：2024-12-19
修改时间：2024-12-19
"""

import os
from datetime import timedelta


class Config:
    """
    基础配置类
    """
    # 基础配置
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'MetasoCreator-secret-key-2024'
    
    # Flask配置
    DEBUG = False
    TESTING = False
    
    # 数据库配置
    MONGODB_HOST = os.environ.get('MONGODB_HOST') or 'localhost'
    MONGODB_PORT = int(os.environ.get('MONGODB_PORT') or 27017)
    MONGODB_DB = os.environ.get('MONGODB_DB') or 'MetasoCreator'
    MONGODB_USERNAME = os.environ.get('MONGODB_USERNAME')
    MONGODB_PASSWORD = os.environ.get('MONGODB_PASSWORD')
    
    # Redis配置
    REDIS_HOST = os.environ.get('REDIS_HOST') or 'localhost'
    REDIS_PORT = int(os.environ.get('REDIS_PORT') or 6379)
    REDIS_DB = int(os.environ.get('REDIS_DB') or 0)
    REDIS_PASSWORD = os.environ.get('REDIS_PASSWORD')
    
    # 缓存配置
    CACHE_DEFAULT_TIMEOUT = 300  # 5分钟
    CACHE_KEY_PREFIX = 'MetasoCreator:'
    
    # 秘塔AI API配置
    METASO_API_KEY = os.environ.get('METASO_API_KEY')
    METASO_API_BASE_URL = os.environ.get('METASO_API_BASE_URL') or 'https://metaso.cn/api/v1'
    METASO_TIMEOUT = int(os.environ.get('METASO_TIMEOUT') or 30)  # API请求超时时间（秒）
    
    # 文件存储配置
    UPLOAD_FOLDER = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data', 'content')
    MAX_CONTENT_LENGTH = 16 * 1024 * 1024  # 16MB
    
    # 日志配置
    LOG_LEVEL = 'INFO'
    LOG_FILE = 'MetasoCreator.log'
    
    # 分页配置
    DEFAULT_PAGE_SIZE = 20
    MAX_PAGE_SIZE = 100
    
    @staticmethod
    def init_app(app):
        """
        初始化应用配置
        
        Args:
            app: Flask应用实例
        """
        pass


class DevelopmentConfig(Config):
    """
    开发环境配置
    """
    DEBUG = True
    LOG_LEVEL = 'DEBUG'
    
    # 开发环境数据库
    MONGODB_DB = 'MetasoCreator_dev'
    REDIS_DB = 1


class TestingConfig(Config):
    """
    测试环境配置
    """
    TESTING = True
    DEBUG = True
    
    # 测试环境数据库
    MONGODB_DB = 'MetasoCreator_test'
    REDIS_DB = 2
    
    # 禁用CSRF保护
    WTF_CSRF_ENABLED = False


class ProductionConfig(Config):
    """
    生产环境配置
    """
    DEBUG = False
    LOG_LEVEL = 'WARNING'
    
    @classmethod
    def init_app(cls, app):
        Config.init_app(app)
        
        # 生产环境特殊配置
        import logging
        from logging.handlers import RotatingFileHandler
        
        # 配置日志轮转
        if not os.path.exists('logs'):
            os.mkdir('logs')
        file_handler = RotatingFileHandler(
            'logs/MetasoCreator.log',
            maxBytes=10240000,
            backupCount=10,
            encoding='utf-8'
        )
        file_handler.setFormatter(logging.Formatter(
            '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
        ))
        file_handler.setLevel(logging.INFO)
        app.logger.addHandler(file_handler)
        
        app.logger.setLevel(logging.INFO)
        app.logger.info('MetasoCreator生产环境启动')


# 配置字典
config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}